package com.sky.controller.user;

import com.sky.constant.JwtClaimsConstant;
import com.sky.dto.UserLoginDTO;
import com.sky.entity.User;
import com.sky.properties.JwtProperties;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.OrderService;
import com.sky.service.UserService;
import com.sky.utils.JwtUtil;
import com.sky.vo.UserLoginVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/user/user")
@Api(tags = "C端用户相关接口")
@Slf4j
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private JwtProperties jwtProperties;

    @Autowired
    private OrderService orderService;

    @PostMapping("/login")
    public Result<UserLoginVO> login(@RequestBody UserLoginDTO userLoginDTO){
        log.info("登录人的授权码:"+userLoginDTO.getCode());

        // service 完成登录业务  把code 给service 想微信服务器发起请求 得到 openid
        //  根据openid 数据库查有没有这个openid用户 有 说明老会员 可以得到用户id
        //  根据openid 数据查 没有这用户，说明是新用户  添加到数据库表user中，用户id 随着新增自增产生了。
        //                                         如果设置主键回显 就能拿到用户id
        User user = userService.wxLogin(userLoginDTO);

        //将来这里得到一个UserLoginVo信息
        UserLoginVO userLoginVO = new UserLoginVO();
        userLoginVO.setId(user.getId());//用户id --数据库
        userLoginVO.setOpenid(user.getOpenid());//微信用户openid--服务器发起请求后才得到的。
        // 生成token  三部分  头.有效载荷.签名
        // 有效载荷以map集合形式
        Map<String,Object> claims = new HashMap<>();
        // 存储 存储用户id
        claims.put(JwtClaimsConstant.USER_ID,user.getId());
        //工具类产生
//         JwtUtil.createJWT(用户秘钥,用户过期时间,载荷数据)
        String token =
                JwtUtil.createJWT
                        (jwtProperties.getUserSecretKey(),
                                jwtProperties.getUserTtl(),
                                claims);
        userLoginVO.setToken(token);// 生成令牌

        return Result.success(userLoginVO);
    }
    /**
     * 历史订单查询
     *
     * @param page
     * @param pageSize
     * @param status   订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消
     * @return
     */
    @GetMapping("/historyOrders")
    @ApiOperation("历史订单查询")
    public Result<PageResult> page(int page, int pageSize, Integer status) {
        PageResult pageResult = orderService.pageQuery4User(page, pageSize, status);
        return Result.success(pageResult);
    }
}